{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "78ec9499-2df7-41c8-bedd-fa8b48b2e624",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import random\n",
    "\n",
    "raw_data_path = \"/nvme/zzr/CoderUJB/log/code_1b_iter_0047680/data_influence/processed_merged.json\"\n",
    "data = json.load(open(raw_data_path, 'r'))\n",
    "\n",
    "random.seed(42)\n",
    "random.shuffle(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "77b32e5e-017b-4b74-84aa-3de338d8a859",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data, infer_data = data[:int(len(data) * 0.9)], data[int(len(data) * 0.9):]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d4341701-2734-433a-8bbd-2ebaaf47778c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIIAAAM6CAYAAAD9q+j6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAB7CAAAewgFu0HU+AABiY0lEQVR4nO3debyXZZ0//teBI7u44oIwouIRbRtGNAuMttFSi7CynCmXBJnsa9oULuloM2bukwHmErjUlGujlkjWmLmAbGZliiEmBQolmaGA4IH79wc/Ph04O9s5h/v5fDzO43Gfc133+77uz8Xy+bzOdd93VVEURQAAAADY5nVq6wEAAAAAsHUIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKInqth4ArfPGG2/kqaeeSpL06dMn1dWmEAAAADa32travPzyy0mSt73tbenWrVsbj2jzkCJ0ME899VQOPfTQth4GAAAAlMbMmTNzyCGHtPUwNguXhgEAAACUhBVBHUyfPn0q2zNnzsyee+7ZhqMBAACAbdOiRYsqV+TU/Sze0QmCOpi69wTac889069fvzYcDQAAAGz7tqX787o0DAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCSq23oAAAC0zoBzJjfbZ/6lR2+FkQAAHY0VQQAAAAAlIQgCAAAAKAmXhgEAtCMtuewLAGBjWREEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAktujNov/85z9n5syZmTlzZmbNmpVZs2blL3/5S5LkxBNPzM0339xsjeXLl+cnP/lJfvazn2X27NmZN29eXn/99fTu3Ts1NTU58sgj82//9m/ZY489WjSm5cuXZ8KECbnzzjvz/PPPZ+XKlenfv3+OPvrofPGLX8zee+/dojp/+MMfMm7cuEyePDkLFixI165ds99+++W4447LF77whfTo0aNFdQAAtoSW3HR6/qVHb4WRAADtSVVRFMUWK15V1WhbS4Kg3/zmNxk6dGhef/31Jvv17t07N9xwQz71qU812W/evHk56qij8txzzzVa5/vf/36OOeaYJuv8+Mc/zmc+85ksXbq0wfaamppMnjw5AwcObLLOxli4cGH69++fJFmwYEH69eu32Y8BALSdrfnUMEEQADRuW/38vdUuDfuHf/iHHHHEEa3aZ+nSpZUQaOjQobnkkkvys5/9LL/85S/zwAMPZMyYMenUqVOWLl2af/3Xf82UKVMarfXaa6/l6KOProRAo0ePzoMPPphp06bl4osvTq9evbJ06dJ86lOfyq9+9atG6zz55JP51Kc+laVLl6ZXr165+OKLM23atDz44IMZPXp0kmTu3Lk5+uij89prr7XqfAEAAAC2pC16adgFF1yQQw45JIccckh23333zJ8/P/vss0+L9+/UqVOOO+64XHjhhTnooIPqtR9xxBH58Ic/nJEjR2b16tU5/fTT89xzzzW4EumKK67I3LlzkySXX355xo4dW2l717velfe+970ZPnx4li9fnjPPPDO/+MUvGhzTGWeckRUrVqS6ujo//elP8653vavS9v73vz/7779/zjrrrMydOzdXXXVVvva1r7X4fAEAAAC2pC26Iug///M/c8wxx2T33XffqP3f/e535/bbb28wBFpnxIgROfbYY5Mkzz//fJ588sl6fd58882MGzcuSXLggQfmy1/+coPHOuWUU5IkDz/8cGbNmlWvz8yZM/Poo48mSU455ZT1QqB1vvzlL+fAAw9MknzrW9/Km2++2dxpAgAAAGwV28RTw973vvdVtp9//vl67Q899FD+9re/JVl7b6JOnRo+7ZNOOqmyfffdd9drv+eeeyrbJ598coM1OnXqlBNOOCFJ8uqrr+ahhx5qdvwAAAAAW8M2EQStXLmyst25c+d67Y899lhle/jw4Y3WGTJkSOVpX1OnTm20Ts+ePXPwwQc3WqfuMRqqAwAAANAWtokg6OGHH65sr7ssq65nnnmmsj1o0KBG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AAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQElUt/UAAADauwHnTG7rIQAAbBZbdEXQn//859x333254IIL8uEPfzi77rprqqqqUlVVlZNOOqnV9aZMmZKRI0emX79+6dq1a/r165eRI0dmypQpLa5RW1ub6667Locffnj69OmT7t27Z7/99suYMWPy9NNPt7jOkiVLcsEFF+Ttb397evfund69e+ftb397LrjggvzlL39p9bkBAAAAbGlbdEXQ7rvvvlnqrFmzJqeeemomTZq03s9ffPHFvPjii7nnnnsyatSoXH/99enUqfFsa8mSJTnqqKMya9as9X7++9//PjfccENuueWWTJgwIaNGjWpyPDNmzMjHPvaxLF68eL2fP/XUU3nqqacyceLE3HPPPTn00ENbeaYAAAAAW85Wu0fQP/zDP+SII47YqH3PO++8Sgg0ePDg3HrrrZk5c2ZuvfXWDB48OEkyceLEnH/++Y3WWL16dUaOHFkJgY499thMmTIlM2bMyLhx47Lbbrtl5cqVGTNmTJMrjBYsWJCPfOQjWbx4caqrq3PWWWflkUceySOPPJKzzjor1dXVWbRoUT7ykY9k4cKFG3W+AAAAAFvCFl0RdMEFF+SQQw7JIYcckt133z3z58/PPvvs06oac+fOzZVXXpkkGTJkSB555JF07949SXLIIYfkox/9aIYPH57Zs2fniiuuyOc+97kMHDiwXp1bbrkljz32WJLktNNOyzXXXFNpO/TQQ/PhD384Bx98cJYuXZovfvGLmTNnTqqr67885513Xl5++eUkyQ9+8IN88pOfrLQdfvjhOfjgg/OpT30qf/7zn3P++efn5ptvbtX5AgAAAGwpW3RF0H/+53/mmGOO2aRLxK6++urU1tYmScaPH18Jgdbp0aNHxo8fn2Tt/X+++c1vNlhnXZi0884754orrqjXPnDgwJx77rlJknnz5uXuu++u12fx4sX5/ve/nyQ58sgj1wuB1jnuuONy5JFHJkm+973v1bt8DAAAAKCttOvHxxdFkXvvvTdJMmjQoBx22GEN9jvssMNywAEHJEnuvffeFEWxXvvcuXMzZ86cJGuDmh49ejRYp+4NrBsKgn70ox9lzZo1SZKTTz650XGvq7NmzZr86Ec/arQfAAAAwNbUroOgF154IS+99FKSZPjw4U32Xdf+4osvZv78+eu1rbskrLk6e+yxR2pqapIkU6dOrdfe0jp12xqqAwAAANAWtug9gjbVM888U9keNGhQk33rts+ZM2e9exG1ts7cuXOzYMGCLFu2LD179qxXZ4cddsgee+zRaI0999wzvXv3ztKlSysrkVqquRtML1q0qFX1AAAAANZp10FQ3VCkX79+Tfbt379/ZXvBggWbXKcoiixcuLByyVndOs3VWFfn6aefrjeWluwHAAAAsCW060vDXnvttcp2r169muxbd+XO66+/vkXrNFejbp0NawAAAAC0lXa9IuiNN96obHfp0qXJvl27dq1sr1ixYovWaa5G3Tob1mhOcyuIFi1alEMPPbRVNQEAAACSdh4EdevWrbK9atWqJvuuXLmysr3hI+Y3rFP3+9bWWb58ebNjqVtnwxrNacllZwAAAAAbo11fGrb99ttXtpu7xGrZsmWV7Q0v3drcdVpyude6Oi25jAwAAABga2jXQVDd1THNPU2r7iVVG95weWPqVFVV1Vuds+775mrUrePmzwAAAEB70a6DoIMOOqiy/eyzzzbZt277gQceuMl1+vfvv96No+vW+dvf/pbFixc3WmPRokVZunRpg2MBAAAAaCvtOgjaZ5990rdv3yTJww8/3GTfRx55JEmy1157ZcCAAeu1DRs2rLLdVJ3Fixdn7ty5SZKhQ4fWa29pnbptDdUBAAAAaAvtOgiqqqrKiBEjkqxdqTN9+vQG+02fPr2ykmfEiBGpqqpar72mpqayMueOO+7I8uXLG6xz8803V7ZHjhxZr/2jH/1oOnVa+5LddNNNjY57XZ1OnTrlox/9aKP9AAAAALamdh0EJcmZZ56Zzp07J0lOP/30eo9jX7FiRU4//fQkSXV1dc4888wG63zlK19Jkrzyyis566yz6rU///zzueSSS5IkAwcObDAI2mOPPfKv//qvSZIHHnggd911V70+d955Zx544IEkyWc/+9nsscceLTlNAAAA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XnllkmTnnXfOFVdcUa994MCBOffcc5OsDYXuvvvuFp0jAAAAwJbWIYKgVatWVbb33XffRvvtt99+De5TFEXuvffeJMmgQYNy2GGHNbj/YYcdlgMOOCBJcu+992bDxVJz586tBEzHHXdcevTo0WCdk046qbItCAIAAADaiw4RBK0LZ5Lk97//faP9nn/++SRJVVVV9t9//8rPX3jhhbz00ktJkuHDhzd5rHXtL774YubPn79e22OPPVavX0P22GOP1NTUJEmmTp3a5PEAAAAAtpYOEQQdf/zx6d27d5Lksssuy+rVq+v1efLJJzN58tr7APzLv/xLpX+SPPPMM5XtQYMGNXmsuu0bXl62MXUWLFiQZcuWNdm3roULFzb5tWjRohbXAgAAAKhr893FeAvadddd873vfS/HH398pk6dmkMOOSRnnnlmampq8vrrr2fq1Km56qqrsmrVqvzTP/1TrrrqqvX2X7hwYWW7uZs7rbsRVLI2xNnUOkVRZOHCheutamrp8QEAAAA2pw4RBCXJRz/60TzxxBO56qqrMmnSpJx44onrte++++656KKLMnr06Hr37nnttdcq27169WryOOseQ58kr7/++hapAwAAANAWOkwQtGrVqnz3u99t8CbOSfKnP/0p//M//5N99tknH/3oR9dre+ONNyrbXbp0afI4Xbt2rWyvWLFii9RpyoarkDa0aNGiHHrooS2uBwAAALBOhwiCli1blg9/+MN59NFH07lz55x11lk5+eSTs+++++aNN97IjBkz8l//9V957LHH8rGPfSxXXnll/v3f/72yf7du3SrbdZ8m1pCVK1dWtjd8xPyGdep+35o6TWnukjMAAACAjdUhbhb9ta99LY8++miSZNKkSbnssssyaNCgdOnSJb17984///M/56GHHsr73ve+FEWRsWPH5te//nVl/+23376y3dxlWnVv7Lzh5V+bqw4AAABAW2j3QVBRFLnxxhuTJDU1NfXuDbROdXV1LrrooiTJmjVrcvPNN1fa6q6yqXvD54bUvTRrwxs3b0ydqqoqq3wAAACAdqHdB0F/+tOf8sorryRJBg8e3GTfgw8+uLL97LPPVrYPOuigBn/ekLrtBx544HptG1Onf//+6904GgAAAKCttPsgqLr677cxqq2tbbLvm2++2eB+++yzT/r27Zskefjhh5us8cgjjyRJ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KNp6EC3x4IMP5oMf/GCS5IQTTsjEiROz3XbbNdh31apV6dKly3o/mzt3bt7ylrektrY2Q4YMySOPPJLu3btX2pcvX57hw4dn9uzZqa6uzpw5czJw4MB6tW+88caccsopSZLTTjst11xzzXrt8+bNy8EHH5ylS5dm4MCBmTNnTqqrN9/Cq4ULF6Z///5JkgULFqRfv36brTYAdCQDzpnc1kOgHZt/6dFtPQQAOrht9fN3h1gRtGbNmnz+859PkrzjHe/IpEmTGg2BktQLgZLk6quvTm1tbZK1l5fVDYGSpEePHhk/fnyStff/+eY3v9lg7SuvvDJJsvPOO+eKK66o1z5w4MCce+65SdaGQnfffXdzpwcAAACwVXSIIOinP/1pnnvuuSTJ2Wef3eoVNkVR5N57702SDBo0KIcddliD/Q477LAccMABSZJ77703Gy6Wmjt3bubMmZMkOe6449KjR48G65x00kmVbUEQAAAA0F50iCDozjvvTJJUVVXlmGOOqfz8lVdeyXPPPZdXXnmlyf1feOGFvPTSS0mS4cOHN9l3XfuLL76Y+fPnr9f22GOP1evXkD322CM1NTVJkqlTpzZ5PAAAAICtpUMEQdOnT0+SDBgwINtvv31+8IMf5G1ve1t22WWX1NTUZJdddskBBxyQK6+8MitXrqy3/zPPPFPZHjRoUJPHqtu+bvXPptRZsGBBvSecAQAAALSFdv/4+DVr1uTZZ59Nkuy6664544wzMm7cuHr95s6dm7Fjx+buu+/O5MmTs+OOO1baFi5cWNlu7uZO624ElawNceramDpFUWThwoWVS86aU/cYDVm0aFGL6gAAAABsqN0HQX/729+yZs2aJMlTTz2VWbNmZc8998wVV1yRo446Kt26dcusWbNy9tlnZ/r06Zk2bVo+97nP5X//938rNV577bXKdq9evZo8Xs+ePSvbr7/++nptm6tOU+oGUQBQVp4IBgCwZbT7S8PqXlb1xhtvpEePHnnooYfyr//6r9lpp53SvXv3vOc978nPf/7zvOMd70iy9gbNM2bMWG+/dRp6olhdXbt2rWyvWLFivbbNVQcAAACgLbT7FUHdunVb7/tRo0Y1eJlV9+7dc/HFF1duJn377bfnne98Z70aq1atavJ4de8xtOEj5jess+HYWlqnKRtejrahRYsW5dBDD21xPQAAAIB12n0QtP3226/3/RFHHNFo3w984AOprq5ObW1tZs2a1WCN5i7TqrsCacPLvzas01QQ1FSdpjR37yEAAACAjdXuLw3r2rVr+vTpU/m+qXvodOvWLbvuumuS5OWXX678vG640tzNmOuuyNnwWBtTp6qqSrgDAAAAtAvtPghKkre85S2V7dWrVzfZd117dfXfFzsddNBBle11TyBrTN32Aw88cL22janTv3//9W4cDQAAANBWOkQQ9J73vKey/fvf/77RfkuXLs2SJUuSJHvttVfl5/vss0/69u2bJHn44YebPNYjjzxS2X/AgAHrtQ0bNqyy3VSdxYsXZ+7cuUmSoUOHNnk8AAAAgK2lQwRBH//4xyvbd999d6P97r777hRFkSQ5/PDDKz+vqqrKiBEjkqxdqTN9+vQG958+fXplJc+IESNSVVW1XntNTU1lldAdd9yR5cuXN1jn5ptvrmyPHDmy0fECAAAAbE0dIgh6+9vfng9/+MNJkltvvTUPPvhgvT6LFy/O+eefn2Tto91PPvnk9drPPPPMdO7cOUly+umn13uk+4oVK3L66acnWXtZ2ZlnntngWL7yla8kSV555ZWcddZZ9dqff/75XHLJJUmSgQMHCoIAAACAdqNDBEFJcvXVV2fHHXfMmjVrcswxx+Tcc8/No48+mtmzZ+fb3/52DjnkkMoNnC+66KL1Lg1L1q7mGTt2bJJk9uzZGTp0aG6//fbMnj07t99+e4YOHZrZs2cnScaOHZv999+/wXGceOKJlcu9rrnmmnziE5/IAw88kJkzZ2bChAl597vfnaVLl6ZTp04ZN27cevcqAgAAAGhLVcW6a6k6gMceeyyf+MQn8qc//anB9qqqqpx33nm56KKLGmxfs2ZNRo8enRtvvLHRY5xyyim54YYb0qlT4xnZkiVLctRRR633iPq6unbtmgkTJmTUqFFNnM3GWbhwYeVpZgsWLPBEMgC2SQPOmdzWQ6CDm3/p0W09BAA6uG3183eHWRGUrL1Z89NPP50LL7ww73jHO9K7d+9069Yt++yzT04++eQ88cQTjYZASdKpU6dMmjQpkydPzogRI9K3b9906dIlffv2zYgRI3L//fdn4sSJTYZASbLrrrtm2rRp+fa3v51hw4Zll112Sbdu3bLvvvtm9OjReeKJJ7ZICAQAAACwKTrUiiC23UQSAOqyIohNZUUQAJtqW/383aFWBAEAAACw8QRBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJVHd1gMAAIDNbcA5k5vtM//So7fCSACgfbEiCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASVS39QAAgHIZcM7kth4CAEBpWREEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACURHVbDwAAANrCgHMmN9tn/qVHb4WRAMDWY0UQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlISnhgEAm01LnsIEAEDbsSIIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoiQ4dBJ199tmpqqqqfP3iF79odp8pU6Zk5MiR6devX7p27Zp+/fpl5MiRmTJlSouPW1tbm+uuuy6HH354+vTpk+7du2e//fbLmDFj8vTTT2/CGQEAAABsOdVtPYCN9atf/Sr//d//3eL+a9asyamnnppJkyat9/MXX3wxL774Yu65556MGjUq119/fTp1ajwfW7JkSY466qjMmjVrvZ///ve/zw033JBbbrklEyZMyKhRo1p3QgAAAABbWIdcEbQu1Kmtrc1uu+3Won3OO++8Sgg0ePDg3HrrrZk5c2ZuvfXWDB48OEkyceLEnH/++Y3WWL16dUaOHFkJgY499thMmTIlM2bMyLhx47Lbbrtl5cqVGTNmTKtWGAEAAABsDR0yCBo3blxmzZqVQYMG5ZRTTmm2/9y5c3PllVcmSYYMGZKpU6fm05/+dA455JB8+tOfzmOPPZYhQ4YkSa644orMmzevwTq33HJLHnvssSTJaaedlh/+8If50Ic+lEMPPTSnn356pk6dmt69e2fNmjX54he/mNra2s10xgAAAACbrsMFQX/84x/zH//xH0mS6667Ll26dGl2n6uvvroSyowfPz7du3dfr71Hjx4ZP358krX3//nmN7/ZYJ11YdLOO++cK664ol77wIEDc+655yZJ5s2bl7vvvruFZwUAAACw5XW4IOgLX/hCXn/99Zx44okZPnx4s/2Losi9996bJBk0aFAOO+ywBvsddthhOeCAA5Ik9957b4qiWK997ty5mTNnTpLkuOOOS48ePRqsc9JJJ1W2BUEAAABAe9KhgqA77rgj9913X3beeefK6pzmvPDCC3nppZeSpNngaF37iy++mPnz56/Xtu6SsObq7LHHHqmpqUmSTJ06tUVjBAAAANgaOsxTw1599dWcccYZSZLLLrssu+66a4v2e+aZZyrbgwYNarJv3fY5c+Zkn3322eg6c+fOzYIFC7Js2bL07NmzRWNNkoULFzbZvmjRohbXAgAAAKirwwRBZ511VhYvXpyhQ4e26AbR69QNVvr169dk3/79+1e2FyxYsMl1iqLIwoULK5ectUTdMQAAAABsTh3i0rBHH300EydOTHV1da677rpUVVW1eN/XXnutst2rV68m+9ZdufP6669vkToAAAAAbaXdrwhatWpVTj311BRFkS996Ut561vf2qr933jjjcp2c08Y69q1a2V7xYoVW6ROczZcibShRYsW5dBDD21VTQAAAICkAwRB3/jGN/Lss8/mH/7hH3LhhRe2ev9u3bpVtletWtVk35UrV1a2N3zE/IZ16n7fmjrNae6yMwAAAICN1a4vDXv22WdzySWXJEnGjx/fqpsur7P99ttXtpu7TGvZsmWV7Q0v/9pcdQAAAADaSrteEfTNb34zq1atyr777pvly5fntttuq9fnt7/9bWX75z//eRYvXpwk+chHPpKePXuut8KmuSdy1b0sa8ObNm9Yp6mnlq2rU1VVZYUPAEAHNuCcyc32mX/p0VthJACwebTrIGjdJVa///3vc/zxxzfb/6KLLqpsv/DCC+nZs2cOOuigys+effbZJvev237ggQeu17ZhnX/8x39stk7//v03ahUTAAAAwJbQri8N2xz22Wef9O3bN0ny8MMPN9n3kUceSZLstddeGTBgwHptw4YNq2w3VWfx4sWZO3dukmTo0KEbM2QAAACALaJdB0E333xziqJo8qvuDaQfeuihys/XBTlVVVUZMWJEkrUrdaZPn97gsaZPn15ZyTNixIh6j6ivqamprBK64447snz58kbHvM7IkSM36rwBAAAAtoR2HQRtLmeeeWY6d+6cJDn99NPrPdJ9xYoVOf3005Mk1dXVOfPMMxus85WvfCVJ8sorr+Sss86q1/78889Xbm49cOBAQRAAAADQrpQiCKqpqcnYsWOTJLNnz87QoUNz++23Z/bs2bn99tszdOjQzJ49O0kyduzY7L///g3WOfHEEyuXe11zzTX5xCc+kQceeCAzZ87MhAkT8u53vztLly5Np06dMm7cuFRXt+tbMAEAAAAlU5qk4uKLL86f//zn3HjjjXnyySfz6U9/ul6fU045JV//+tcbrdG5c+fcc889OeqoozJr1qz88Ic/zA9/+MP1+nTt2jUTJkzIhz/84c1+DgAAAACbohQrgpKkU6dOmTRpUiZPnpwRI0akb9++6dKlS/r27ZsRI0bk/vvvz8SJE9OpU9Mvya677ppp06bl29/+doYNG5Zddtkl3bp1y7777pvRo0fniSeeyKhRo7bSWQEAAAC0XFVRFEVbD4KWW7hwYfr3758kWbBgQfr169fGIwKAvxtwzuS2HgJsdfMvPbqthwDAFrCtfv4uzYogAAAAgLITBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASVS39QAAgI5hwDmT23oIAABsIiuCAAAA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AFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABKQhAEzVi+fHkuv/zyHHLIIdl5553Ts2fPDBo0KF/+8pfzhz/8YbMe67e//W3GjBmT/fbbL927d0+fPn1y+OGH57rrrkttbW2L60yZMiUjR45Mv3790rVr1/Tr1y8jR47MlClTmt334YcfziWXXJKRI0fmLW95S3bfffd06dIlO+ywQ972trfl85//fJ544olNOc12rWzz/ac//SkTJ07Mv/zLv+Sggw5Kr1690qVLl+y555750Ic+lBtuuCErVqzYlNNs98o25ytXrsz06dMzfvz4fPazn80BBxyQTp06paqqKlVVVZtyem3mD3/4Q7785S9n0KBB6dmzZ3beeecccsghueKKK7J8+fLNdpxNed3Xqa2tzXXXXZfDDz88ffr0Sffu3bPffvtlzJgxefrpp1tcZ8mSJbngggvy9re/Pb17907v3r3z9re/PRdccEH+8pe/bMzpdShlmvNXX301P/vZz3LxxRdnxIgR6du3b+Xv63vf+95NOLuOo0zz/cwzz+SKK67IMccckwEDBqRbt27p0aNH9tlnn3z605/O/fffvymn2GGUZc5XrlyZu+++O+eee24++MEPpqamJjvvvHO222677LLLLnn3u9+dCy64IAsXLtzUU23XyjLfTbn22msr/7ZXVVXl5ptv3uhaLVIAjXruueeK/fffv0jS4Ffv3r2LH//4x5vlWDfccEPRpUuXRo916KGHFi+//HKTNVavXl2ccsopjdZIUowaNapYvXp1ozX22muvJvdPUlRVVRWnn356k3U6orLN9w033FB07ty52fnef//9i1//+teb5bzbm7LNeVEUxUknndTk/h3Nj370o6J3796Nnk9NTU3x3HPPbdIxNsfrXhRF8fLLLxeHHHJIozW6du1afOc732l2PNOnTy/22GOPRuvsueeexYwZMzbpnNuzss35gAEDGt1/+PDhm3SeHUGZ5vuEE05o9v/kJMWRRx5Z/PWvf92kc27PyjTnzz33XIvmvGfPnsXNN9+8SefcXpVpvhvz4osv1nsNbrrppo0825bpeO/4YCtZunRpUVNTU/nLOHr06OLBBx8spk2bVlx88cVFr169iiRFjx49iieffHKTjjV58uSiU6dORZJi9913L8aNG1fMmDGjmDJlSnHsscdWxjBs2LCitra20TrnnHNOpe/gwYOLW2+9tZg5c2Zx6623FoMHD660nXvuuY3WqKmpKY488sjia1/7WvH973+/+PnPf17Mnj27uO+++4oLLrig2H333St1zj777E067/akjPN90UUXFUmKLl26FMcee2xx3XXXFQ8//HDxy1/+srjzzjuLI444olKjT58+xYIFCzbpvNubMs55URTFiSeeWOm3/fbbF8OHD18vVOhIfvnLXxbdu3cvkhS9evUqLr744mLatGnFgw8+WIwePXq9N5FLly7d6ONsjte9tra2GDZsWKXvscceW0yZMqWYMWNGMW7cuGK33XYrkhSdOnUq7r///kbr/PGPfyz69OlTJCmqq6uLs846q3jkkUeKRx55pDjrrLOK6urqIkmx2267bXN/Z4uinHO+9957V2rsvvvuxTHHHFP5flsPgso23x/4wAeKJMXOO+9cnHrqqcUPfvCDYtq0acXMmTOL66+/vjjggAPW+/9iW/uFXFGUb86fe+65Yrfddis+9alPFVdeeWVx5513Fo899lgxY8aM4n//93+LU045pejWrVuRrP1F7OTJkzf6nNujss13Y0aOHFn5v1sQBG3sP/7jPyp/ES+//PJ67VOnTq284d6UN2KrVq0q9t133yJZu/pg3rx59fqcdtppzf6j8Lvf/a4yniFDhhTLly9fr33ZsmXFkCFDKh8eGkvW33zzzSbHu2TJksp4q6uriyVLlrTsRNu5Ms73f//3fxdnn3128ec//7nR8f77v/97ZSwnn3xy6062nSvjnBdFUdx2223FTTfdVPz2t7+tfIgYPnx4hwyCDj/88Mr5Tps2rV775ZdfXjmvCy+8cKOOsble90mTJlXGctppp9Vrf+655yq/DRw4cGCj/xZ/9rOfrdS544476rXffvvtlfYTTzyx9SfczpVxzq+44orirrvuKv74xz9WflaWIKhs833SSScV119/ffHGG280eIxly5at90H0lltu2Ygzbt/KNuerV68u1qxZ0+R4Z8yYUWy33XaVEGNbUrb5bsg999xTJGt/6XrVVVcJgqAtrVq1qthhhx2KJMWBBx7Y6G9cxowZU/nLOnPmzI06Vt037ZdcckmDfZYtW1bstNNORZLioIMOarDP5z//+Uqdxx9/vME+jz/+eJP/gLXUJZdc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/iRr7z8wYcKEZvfraMx5x9aa1yP5+2vS0edvY/7cbit/Bso652Vlvv/ulVdeyRFHHFF5itH48ePz6U9/utn9Ohpz3rgPfOADOeOMM5Ik//mf/5lnn3221TXamzLO98svv5yvfOUrSZKLLrqozVfauzSMDm1zPA1lzz33rPezfv36ZcaMGVm2bFleffXVJm8mu+5mYn369FlvKWBL7LXXXpXt5m4YWPemZXVvZrZuvJujTksdccQR6d69e1asWJG77rorp5566kbVaS3z/ffxbo46DfnCF76Q73//+0mSD3/4w/mf//mfdOrUdr8zMOd/H+/mqLOt6NatW3bZZZf85S9/afb1+Otf/1p5U9ba12Nzve4b1tl1112brVNVVVXvhpT9+vXLn/70pxbdYHZdnW3lz0BZ57yszPdar732Wj70oQ/l6aefTrL2w+MXvvCFJvfpqMx500aMGJHLL788a9asyf/+7//mq1/96kbVaS/KON8TJ07MX/7yl+y4447ZZZddctttt9Xbd8aMGettr1uJ9P73vz+77bZbk+NvLUEQHdqWetTeQQcdlB/+8IdJkmeffTaHHXZYg/1qa2srd/LfmCW622+/ffr3758FCxY0m+7Xbd/wWAcddFCD/Vpbp6U6d+6cnXbaKStWrMgf/vCHjaqxMcz338fbUL/W1tnQ2WefnWuvvTZJ8p73vCc//OEP2/weUOb87+NtqF9r62xLDjrooDz66KOZN29eamtrG3307Ka8Hpvrdd+wzj/+4z82W6d///7r3XByXZ0nnngif/vb37J48eJGHyG/aNGibfLx0mWc8zIr+3yvWLEiH/nIRzJr1qwkydixY9vs6UJbS9nnvCl9+vSpbG/N995bUtnme90lY6+++mo+85nPNDv26667Ltddd12S5KGHHtrsQZBLw6ABw4YNq2yve1x6Q2bPnl1JqIcOHbpJx/rd736XxYsXN9qv7jg2PNY+++xTWV7Y1HiT5JFHHkmydqXCgAEDNmbIWbVqVeWRj9vCMnbznXz961/P5ZdfnmTtzQrvu+++bfpeFea841v3ui5btixPPPFEo/2ael2bs7le95b+eVu8eHHmzp3b6FhbWmdTzrk9K+Ocl1mZ5/vNN9/Mxz/+8Uqtf/u3f6v8H70tK/OcN+fFF1+sbG8L770T893mCqCelStXFjvssEORpDjwwAOLNWvWNNhvzJgxRZIiSTFz5syNOtbtt99eqXHJJZc02GfZsmXFTjvtVCQpDjrooAb7fP7zn6/Uefzxxxvs8/jjj1f6nHbaaRs13qIoijvuuKNS58QTT9zoOu1F2ef76quvrvR729veVvzlL39p/Yl1MGWf8w0NHz68sl9HMWPGjMqYx4wZ02Cf1atXFwceeGCRpNhxxx2LVatWtfo4m+t1XzeOnXfeuVi2bFmDfS655JJKnTvuuKNe+6JFi4pOnToVSYojjzyy0TEfeeSRRZKiU6dOxaJFi1pwlh1DGee8Mev2GT58eIv36WjKOt+1tbXFJz7xiUq/z372s43+H7WtKeuct8Rpp51WqXPTTTdtdJ32xHzXd9NNN221ee447/hgK/uP//iPyl/Eyy+/vF77tGnTiurq6mbfiK2rsffeezfYvmrVqmLfffctkhS9e/cu5s2bV69PS/7x/93vfld07ty5SFIMGTKkWL58+Xrty5cvL4YMGVIkKaqrq4u5c+fWq/Gzn/2seO655xo9l6IoiqeffrrYY489KuN58MEHm+zfUZRxvouiKG688caiqqqqSFLU1NQUixcvbvTctjVlnfOGdMQgqCiK4vDDD6+c77Rp0+q1X3755ZXzuvDCC+u1P/TQQ82G2pvrdZ80aVLlWF/4whfqtc+bN6/o3bt3kaQYOHBg8eabbzZY57Of/Wylzp133lmvfVsL6jdUxjlvSBmCoKIo33yvWbOmOPnkkyt1Pv7xjxe1tbUNHm9bVbY5/8EPflC8+uqrDdZf5/bbb6+Md4cddtimfmFXtvlujiAI2oGlS5cWNTU1lb+Mp556avHzn/+8ePzxx4tvfOMbRa9evYokRffu3Ysnn3yy0TrNfUgsiqKYPHly5be8u+++ezF+/PhixowZxU9+8pPi4x//eKXGsGHDmnxDcM4551T6Dh48uLjtttuKWbNmFbfddlsxePDgStu5557b4P4XXnhh0blz5+KII44orrrqquJnP/tZ8ctf/rKYOXNmceeddxajR48uunXrVqnzuc99rqUvZ7tXxvm+++67K/8x9u7du5gyZUrx1FNPNfn1+uuvt/QlbffKOOdFsXZVyU033bTe1wEHHLDeG4+6X82Fw23pl7/8ZdG9e/ciSdGrV6/iG9/4RvH4448XP//5z4tTTz21ck41NTXF0qVL6+3fkjeQRbF5Xvfa2tpi6NCh633A+8lPflLMmDGjGD9+fLHbbrsVydpVPPfff3+jdf74xz8Wffr0qbxhPfvss4tHH320ePTRR4uzzz67El726dOnWLBgQatez46gjHP+5JNP1vt7ua7mAQccUK/ttddea9Vr2p6Vbb7//d//vbL/W9/61uKJJ55o9v/lbU3Z5nz48OFFr169is985jPFDTfcUDz88MPFr371q2Lq1KnFjTfeWBx11FGV+lVVVcXNN9/c6te0PSvbfDdHEATtxHPPPVfsv//+lb+QG3717t27+PGPf9xkjZZ8SCyKorjhhhuKLl26NHqsQw89tHj55ZebrLF69eric5/7XKM1khSnnHJKsXr16gb3v/DCC5vcd91X586di7Fjx25zv6Uq23yfeOKJLZrvul8PPfRQk2PqaMo250Wx/pumlny19yXoP/rRjyq/gWvoq6amptEwq6VvIDfH614URfHyyy8XhxxySKM1unbtWnznO99p9pynT5++3srMDb/22GOPYvr06c3W6ajKNuct/b953dcLL7zQ3EvYoZRpvvfee+9W/7+8LSrTnNddkdvU10477VR8//vfb9Hr19GUab6bIwiCduT1118vLrvssmLIkCHFjjvuWPTo0aM44IADii996UvF/Pnzm91/3V/m5j4kFkVRPPXUU8Xo0aOLfffdt+jWrVuxyy67FMOGDSuuvfbaVi0vnDx5cjFixIiib9++RZcuXYq+ffsWI0aMaDadfvXVV4tbb721GDNmTHHYYYcVe++9d9G9e/eia9euxR577FG8973vLS644IIGL23ZVpRpvgVBa5Vpzoti2wuCiqIo5s+fX3zpS18qampqih49ehQ77rhjMWTIkOKyyy5r9Dr+omj5G8h1NuV1X+fNN98svv3tbxfDhg0rdtlll6Jbt27FvvvuW4wePbr47W9/2+I6L7/8cnH++ecXb33rW4tevXoVvXr1Kt72trcV559/frFkyZIW1+moyjTnZQ+CiqI88y0I+ruyzPkf/vCH4pprrimOP/74YvDgwUXfvn2L7bbbrujZs2ex9957F8ccc0wxYcKE4pVXXmnxeDqissx3c7ZmEFRVFEURAAAAALZ5Hh8PAAAAUBKCIAAAAICSEAQBAAAAlIQgCAAAAKAkBEEAAAAAJSEIAgAAACgJQRAAAABASQiCAAAAAEpCEAQAAABQEoIgAAAAgJIQBAEAAACUhCAIAAAAoCQEQQAAAAAlIQgCAAAAKAlBEAAAAEBJCIIAAAAASkIQBAAAAFASgiAAAACAkhAEAQAAAJSEIAgAAACgJARBAAAAACUhCAIAAAAoCUEQAAAAQEkIggAAAABK4v8DECq8F5BQiYMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 413,
       "width": 577
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt \n",
    "\n",
    "%config InlineBackend.figure_format = 'retina'\n",
    "%matplotlib inline\n",
    "\n",
    "plt.hist([i['all_loss'] for i in data], bins=100)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "087ad68c-ba15-44e4-844c-c6ce7a0cd05b",
   "metadata": {},
   "source": [
    "### 去除中间部分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "0ff445ed-a4ce-4d29-b273-f3dc63f4204b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8397053158705701"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m, p = 0.0002, 0.0001\n",
    "r = [m-p, m+p]\n",
    "sum([1 for i in data if i['all_loss'] < r[0] or i['all_loss'] > r[1]]) / len(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "48b44474-7b38-4897-b5e6-5bc0de1097a9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Num Train: 15690 Num Infer: 2077\n"
     ]
    }
   ],
   "source": [
    "def get_data(data, r):\n",
    "    output = list()\n",
    "    \n",
    "    for item in data:\n",
    "        content = item['content']\n",
    "        all_loss = item['all_loss']\n",
    "\n",
    "        if all_loss < r[0] or all_loss > r[1]:\n",
    "            label = 1 if all_loss > r[1] else 0\n",
    "    \n",
    "            output.append({\n",
    "                'content': content, 'label': label\n",
    "            })\n",
    "\n",
    "    return output\n",
    "\n",
    "out_train = get_data(train_data, r)\n",
    "print(\"Num Train:\", len(out_train), \"Num Infer:\", len(infer_data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "24233868-02a7-4f4c-8c38-130cf2714ede",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import pickle\n",
    "\n",
    "output_dir_name = \"p_0p0001\"\n",
    "os.makedirs('./data/trained_for_qwen/{}'.format(output_dir_name), exist_ok=True)\n",
    "\n",
    "pickle.dump(out_train, open(f'./data/trained_for_qwen/{output_dir_name}/train.pkl', 'wb'))\n",
    "pickle.dump(infer_data, open(f'./data/trained_for_qwen/{output_dir_name}/infer.pkl', 'wb'))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
